package com.thunder.rebot.rebotclient.utils;

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.util.Log;

public class RecorderManager {
    private String TAG = RecorderManager.class.getSimpleName();
    static final int SAMPLE_RATE_IN_HZ = 8000;
    static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ,
            AudioFormat.CHANNEL_IN_DEFAULT, AudioFormat.ENCODING_PCM_16BIT);
    AudioRecord mAudioRecord;
    private boolean isGetVoiceRun;
    Object mLock;

    public RecorderManager() {
        mLock = new Object();
        mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_IN_DEFAULT,
                AudioFormat.ENCODING_PCM_16BIT, BUFFER_SIZE);

        mAudioRecord.startRecording();
    }

    public boolean isGetVoiceRun() {
        return isGetVoiceRun;
    }

    public void setGetVoiceRun(boolean getVoiceRun) {
        isGetVoiceRun = getVoiceRun;
    }
    private double noise;

    public double getNoise() {
        return noise;
    }

    public void setNoise(double noise) {
        this.noise = noise;
    }


    public void getNoiseLevel() {
        if (isGetVoiceRun) {
            Log.e(TAG, "还在录着呢");
            return ;
        }

        if (mAudioRecord == null) {
            Log.e("sound", "mAudioRecord初始化失败");
        }
        isGetVoiceRun = true;

        new Thread(new Runnable() {
            @Override
            public void run() {

                short[] buffer = new short[BUFFER_SIZE];
//                while (isGetVoiceRun) {
                    Log.d(TAG, "分贝值2:" + noise);
                    //r是实际读取的数据长度，一般而言r会小于buffersize
                    int r = mAudioRecord.read(buffer, 0, BUFFER_SIZE);
                    long v = 0;
                    // 将 buffer 内容取出，进行平方和运算
                    for (int i = 0; i < buffer.length; i++) {
                        v += buffer[i] * buffer[i];
                    }
                    // 平方和除以数据总长度，得到音量大小。
                    double mean = v / (double) r;
                    noise = 10 * Math.log10(mean);
                    Log.d(TAG, "分贝值:" + noise);
                    // 大概一秒十次
//                    synchronized (mLock) {
//                        try {
//                            mLock.wait(1000);
//                        } catch (InterruptedException e) {
//                            e.printStackTrace();
//                        }
//                    }
//                }
                mAudioRecord.stop();
                mAudioRecord.release();
                mAudioRecord = null;
            }
        }).start();
    }

}
